package com.wzh.microservice.dubbo.provider;

import java.io.IOException;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;

import com.wzh.microservice.dubbo.common.XxxService;
import com.wzh.microservice.dubbo.common.XxxServiceInterface;

/**
 * 服务提供者实现类
 * @author wzh
 *
 */
public class Provider{

	
	public void register(){
		// 服务实现
		XxxServiceInterface xxxService = new XxxService();
		 
		// 当前应用配置
		ApplicationConfig application = new ApplicationConfig();
		application.setName("xxx");
		 
		// 连接注册中心配置
		RegistryConfig registry = new RegistryConfig();
		registry.setAddress("zookeeper://127.0.0.1:2181");
		registry.setUsername("aaa");
		registry.setPassword("bbb");
		 
		// 服务提供者协议配置
		ProtocolConfig protocol = new ProtocolConfig();
		protocol.setName("dubbo");
		protocol.setPort(12345);
		protocol.setThreads(200);
		 
		// 注意：ServiceConfig为重对象，内部封装了与注册中心的连接，以及开启服务端口
		 
		// 服务提供者暴露服务配置
		ServiceConfig<XxxServiceInterface> service = new ServiceConfig<XxxServiceInterface>(); // 此实例很重，封装了与注册中心的连接，请自行缓存，否则可能造成内存和连接泄漏
		service.setApplication(application);
		service.setRegistry(registry); // 多个注册中心可以用setRegistries()
		service.setProtocol(protocol); // 多个协议可以用setProtocols()
		service.setInterface(XxxServiceInterface.class);
		service.setRef(xxxService);
		service.setVersion("1.0.0");
		 
		// 暴露及注册服务
		service.export();
		try {
			System.out.print("服务注册成功===");
			System.in.read();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.print("over");
	}
	
	public static void main(String[] r) {
		Provider provider=new Provider();
		provider.register();
	}

}
